package com.huanzhidadi.java8inaction.chapter8;

import java.util.Arrays;
import java.util.List;

public class Debugging {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        // 如果方法引用指向的是在同一个类中声明的方法，那么方法名称可以在栈跟踪中显示
        /*numbers.stream()
                .map(Debugging::divideByZero)
                .forEach(System.out::println);*/

        numbers.stream()
                .map(x -> x + 17)
                .filter(x -> x % 2 == 0)
                .limit(3)
                .forEach(System.out::println);

        // 使用peek方法对流水线的中间变量的值进行输出
        /*numbers.stream()
                .peek(x -> System.out.println("从流中获取: " + x))
                .map(x -> x + 17)
                .peek(x -> System.out.println("map以后: " + x))
                .filter(x -> x % 2 == 0)
                .peek(x -> System.out.println("filter以后: " + x))
                .limit(3)
                .peek(x -> System.out.println("limit以后: " + x))
                .forEach(System.out::println);*/
    }

    // 如果方法引用指向的是在同一个类中声明的方法，那么方法名称可以在栈跟踪中显示
    private static int divideByZero(Integer n) {
        return n / 0;
    }


}
